<template>
    <div>
        <el-card class="box-card" style="margin-bottom: 10px;">
            <div slot="header" class="clearfix">
                <span style="font-size: 24px;font-weight: bold;">针对CRYSTALS-Kyber的侧信道辅助的选择密文攻击</span>
            </div>

            <el-row :gutter="20">
                <el-col :span="24" style="margin: 5px 0;">
                    <span style="font-size: 20px;font-weight: bold;">什么是CRYSTALS-Kyber？</span><br>
                </el-col>
            </el-row>
            <el-row :gutter="20">
                <el-col :span="1" style="margin: 10px 0;">
                    <i class=el-icon-caret-right />
                </el-col>
                <el-col :span="11" style="margin: 10px 0;">
                    <span class="justify-text" style="font-size: 16px;">
                        Kyber是一种IND-CCA2安全的密钥封装机制。Kyber的安全性基于在模格（MLWE问题）中解决LWE问题的难度。设计用于在未来的量子计算威胁下保护通信安全。该算法专注于高效地创建加密密钥并安全地封装它们，以便在不安全的渠道中传输，同时保持对量子计算机攻击的抵抗力。
                    </span><br>
                </el-col>
                <el-col :span="1" style="margin: 10px 0;">
                    <i class=el-icon-caret-right />
                </el-col>
                <el-col :span="11" style="margin: 10px 0;">
                    <span style="font-size: 16px;">具体算法包括密钥生成、封装、解封装三个阶段。</span><br>
                    <el-button type="primary" @click="displayAlg" style="margin-top: 20px;">点我查看具体算法</el-button>
                </el-col>
            </el-row>
            <el-divider></el-divider>
            <el-row :gutter="20">
                <el-col :span="24" style="margin: 10px 0;">
                    <span style="font-size: 20px;font-weight: bold;">本作品攻击方法</span>
                </el-col>
            </el-row>
            <el-row :gutter="0">
                <el-col :span="1" style="margin: 10px 0;">
                    <i class=el-icon-caret-right />
                </el-col>
                <el-col :span="23" style="margin: 10px 0;">
                    <span class="justify-text" style="font-size: 16px;">
                        本作品以后量子密码标准算法CRYSTALS-Kyber为研究案例，采用了一种改进的侧信道辅助的选择密文攻击方法。通过模拟侧信道技术构建的解密失败应答器，本作品构建了具有更狭窄区间的双边不等式，相较于前人的单边不等式，双边不等式包含更多信息量。然后我们使用修改后的置信传播算法，求解不等式，给出密钥全部分量，或者在不能求解的情况下给出算法的剩余安全性估计。
                    </span>
                </el-col>
            </el-row>

            <el-row :gutter="20">
                <el-col :span="12" style="margin: 10px 0;">
                    <span style="font-size: 18px;font-weight: bold;">不等式生成</span><br>
                    <span class="justify-text" style="font-size: 16px;display: block;margin-top: 10px;">
                        使用经过轻微扰动的密文询问解密失败应答器，获取解密失败有关信息。解密失败是否发生取决于明文m的噪声d，而噪声与密钥相关。所以可以从解密失败中获取密钥有关信息，构建密钥相关不等式。
                    </span>
                    <el-button type="primary" @click="displayInequGen" style="margin-top: 20px;">点我查看具体算法</el-button>
                </el-col>
                <el-col :span="12" style="margin: 10px 0;">
                    <span style="font-size: 18px;font-weight: bold;">不等式求解</span><br>
                    <span class="justify-text" style="font-size: 16px;display: block;margin-top: 10px;">
                        获得了密钥相关的不等式组后，使用置信传播算法求解不等式组。如果置信传播恢复了密钥的一半以上的分量，则执行高斯消元恢复密钥全部分量，否则估计剩余安全性。
                    </span>
                    <el-button type="primary" @click="displayInequSolve" style="margin-top: 20px;">点我查看具体算法</el-button>
                </el-col>
            </el-row>
        </el-card>

        <el-drawer :visible.sync="drawAlgVisible" title="KYBER.CCAKEM" direction="rtl" size="30%">
            <!-- 表格用于显示被过滤的列 -->
            <span style="margin: 0 30px;">密钥生成算法</span><br>
            <img src="\src\assets\alg1.png" style="width: 300px; height: auto; margin:10px 20px;" /><br>
            <span style="margin: 0 30px;">封装算法</span><br>
            <img src="\src\assets\alg2.png" style="width: 300px; height: auto; margin:10px 20px;" /><br>
            <span style="margin: 0 30px;">解封装算法</span><br>
            <img src="\src\assets\alg3.png" style="width: 300px; height: auto; margin:10px 20px;" /><br>
        </el-drawer>

        <el-drawer :visible.sync="drawGenVisible" title="构建密钥相关不等式" direction="rtl" size="40%">
            <div class="explanation-container">
                <span class="section-title">不等式生成算法简介</span>
                <p>
                    不等式生成算法关注算法执行过程中给明文引入的噪声d，因为其与密钥相关。当噪声d某一个系数过大时，则该系数对应解密恢复的明文就会被映射到相反比特，我们称之为解密失败。通过侧信道信息构建的解密失败应答器，攻击者能够观察到是否发生了解密失败，从而获得d有关信息，进而得到密钥有关信息。
                </p>
                <p>
                    但Kyber参数选择使得d难以超过会发生解密失败的阈值，但攻击者可以构造能够使噪声d增大的错误密文来实现这一目的。具体实现方法是轻微扰动密文，只增大密文的一个分量。每当密文增大1，则噪声d会增加一个取决于算法版本的固定数值。然后使用错误密文询问应答器，观察是否发生解密失败，以推断密钥信息。具体过程如下所示：
                </p>
                <ul class="list-description">
                    <li>将密文一个分量增加1，然后使用错误密文询问应答器，观察是否发生解密失败。</li>
                    <li>如果未发生解密失败，则重复上一步，不断增加密文大小，直至发生解密失败。</li>
                    <li>
                        <span>
                            我们不失一般性地假设，密文在增加N时不发生解密失败，而增加N+1时发生解密失败。这意味着增加N时不会跨过会导致解密失败的边界阈值，而增加N+1时跨过了，因此我们可以构建具有如下形式的不等式：
                        </span><br>
                        <img src="\src\assets\Ineq.png" style="width: 400px; height: auto; margin:10px 20px;" /><br>
                    </li>
                </ul>
                <p>
                    上述过程在下图中进行了可视化，其中q/2和3q/4为两个边界阈值。
                </p>
                <img src="\src\assets\step.png" class="centered-image" alt="步骤图示"  /><br>
                <p>
                    具体算法如下所示。
                </p>
                
                
            </div>
            
            <!-- 表格用于显示被过滤的列 -->
            <img src="\src\assets\GenInequ.png" style="width: 500px; height: auto; margin:10px 20px;" /><br>
        </el-drawer>

        <el-drawer :visible.sync="drawSolveVisible" title="求解密钥相关不等式组" direction="rtl" size="40%" class="solve-drawer">
            <div class="explanation-container">
                <span class="section-title">置信传播算法简介</span>
                <p>
                    置信传播算法是一种在变量及其约束条件构成的图形模型上操作的方法，通过迭代传递消息来更新各节点的信息。该图呈现为一个完全二部图如下图所示，分为两部分：一是代表密钥分量的变量节点集合，二是执行约束检查的检查节点集合。
                </p>
                <ul class="list-description">
                    <li>每个变量节点存储其密钥分量的概率分布，并依据密钥从中采样的分布进行初始化。</li>
                    <li>每个检查节点关联一个不等式约束，负责验证变量取值是否满足条件。</li>
                </ul>
                <img src="\src\assets\BPGraph.png" style="width: 500px; height: auto; margin:10px 20px;" /><br>
                <p>
                    迭代流程如下：
                <ol class="process-list">
                    <li>变量节点将概率分布广播至所有相连的检查节点。</li>
                    <li>检查节点基于不等式，每个变量都枚举所有可能取值，并评估每个可能值的满足不等式的概率，形成新的概率分布反馈给变量节点。</li>
                    <li>变量节点接收到所有反馈后，执行概率分布的归一化，并据此更新自身状态。</li>
                </ol>
                此过程称为一次迭代。每轮迭代结束后，变量节点按照最小熵进行排序，首次发现错误分量的位置指示已成功恢复的系数数量。
                </p>
            </div>
        </el-drawer>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                drawAlgVisible: false,
                drawGenVisible: false,
                drawSolveVisible: false,
            }
        },
        methods: {
            displayAlg() {
                this.drawAlgVisible = true
            },
            displayInequGen() {
                this.drawGenVisible = true
            },
            displayInequSolve() {
                this.drawSolveVisible = true
            },
        }
    }

</script>
<style scoped>

    /* 新增CSS类，用于两端对齐 */
    .justify-text {
        text-align: justify;
    }

    .explanation-container {
        padding: 0 20px;
        line-height: 1.6;
    }

    .section-title {
        font-size: 18px;
        font-weight: bold;
        /* margin-bottom: 10px; */
    }

    .list-description {
        list-style-type: disc;
        margin-left: 20px;
        margin-bottom: 15px;
    }

    .process-list {
        list-style-type: decimal;
        margin-left: 20px;
    }

    .centered-image {
        display: block;
        margin-left: auto;
        margin-right: auto;
        width: 400px;
        /* 或者您想要的任何宽度 */
    }

    /* 如果有其他全局或组件内样式，请保持或添加在这里 */
</style>